/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.dao.implementaciones;

import desarrollosoft.ghce.dao.interfaces.IComponenteDAO;
import desarrollosoft.ghce.entidades.Componente;
import desarrollosoft.ghce.entidades.PlantillaEstudioLaboratorio;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author ariel
 */
@Repository("componenteDAO")
public class ComponenteDAO implements IComponenteDAO {

    @PersistenceContext
    private EntityManager entityManager;
    
    @Override
    public List<Componente> obtenerComponentes(PlantillaEstudioLaboratorio plantillaEstudioLaboratorio) {
        Query consulta = entityManager.createQuery(
                "SELECT c FROM Componente c WHERE c.plantillaEstudioLaboratorio = :plantillaEstudioLaboratorio"
        );
        consulta.setParameter("plantillaEstudioLaboratorio", plantillaEstudioLaboratorio);
        return consulta.getResultList();
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void eliminarComponentes(List<Componente> listaComponentes) {
        for (Componente componente : listaComponentes) {
            entityManager.remove( entityManager.merge(componente) );
        }
    }

    @Override
    public List<Componente> obtenerTodosComponentes(PlantillaEstudioLaboratorio plantillaEstudioLaboratorio) {
        Query consulta = entityManager.createQuery(
                "SELECT c FROM Componente c WHERE c.plantillaEstudioLaboratorio = :plantillaEstudioLaboratorio "
                        + "ORDER BY c.nombre ASC"
        );
        consulta.setParameter("plantillaEstudioLaboratorio", plantillaEstudioLaboratorio);
        return consulta.getResultList();
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void crearComponente(Componente componente) {
        entityManager.persist(componente);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void modificarComponente(Componente componente) {
        entityManager.merge(componente);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void eliminarComponente(Componente componente) {
        entityManager.remove( entityManager.merge(componente) );
    }
    
}
